package top.yj95.xiets.basic;

import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.WindowConstants;

/**
 * 文章《<a href="https://xiets.blog.csdn.net/article/details/74363719" target="_balnk">JavaSwing_2.10: JList（列表框）</a>》中的示例代码
 * @author 杨军
 * @since 2023-12-22
 */
public class JListDemo {

    public static void main(String[] args) {
        JFrame frame = new JFrame("测试窗口");
        frame.setSize(250, 200);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        
        JPanel panel = new JPanel();
        
        // 创建一个 JList 实例
        JList<String> list = new JList<>();
        
        // 设置一下首选大小
        list.setPreferredSize(new Dimension(200, 100));
        
        // 允许可递归函数的多选
        list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        
        // 设置选项数据（内部将自动封装成 ListModel）
        list.setListData(new String[] { "香蕉", "雪梨", "苹果", "荔枝" });
        
        // 添加选项选中状态被改变的监听器
        list.addListSelectionListener(e -> {
            // 获取所有被选中的选项索引
            int[] indices = list.getSelectedIndices();
            // 获取选中数据的 ListModel
            ListModel<String> listModel = list.getModel();
            // 输出选中的选项
            for (int index : indices) {
                System.out.printf("选中：%d = %s\n", index, listModel.getElementAt(index));
            }
            System.out.println();
        });
        
        // 设置默认选中项
        list.setSelectedIndex(1);
        
        // 添加到内容面板
        panel.add(list);
        
        frame.setContentPane(panel);
        frame.setVisible(true);
    }
    
}
